package controllers;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import models.Cliente;
import models.Donut;
import models.InterfaceServicosCliente;
import models.ItemPedido;
import models.OperacaoNaoPermitidaException;
import models.Pedido;
import models.SenhaIncorretaException;
import models.ServicosCliente;
import models.UsuarioBloqueadoException;
import models.dados.DadoNaoEncontradoException;
import controllers.Secure.Security;
import play.*;
import play.data.validation.Required;
import play.mvc.*;

@With(Secure.class)
public class PaginasClienteCadastrado extends Controller {

	public static InterfaceServicosCliente servicos = ServicosCliente
			.getInstancia();

	public static void inicial() {
		Application.inicial();

	}

	public static void pagina_cliente() {
		String usuario = Security.connected();
		Pedido carrinho = servicos.getPedidoAtual();
		List<Pedido> pedidos = null;
		try {
			pedidos = servicos.listarPedidos(-1,"", Security.connected(),null,null,null);
		} catch (DadoNaoEncontradoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		render(usuario, pedidos, carrinho);
	}

	public static void alteracao_senha() {
		render();
	}

	public static void alterarSenha(String senhaAntiga, String novaSenha1,
			String novaSenha2) {

		validation.required(senhaAntiga);
		validation.required(novaSenha1);
		validation.required(novaSenha2);
		validation.equals(novaSenha1, novaSenha2);

		if (validation.hasErrors()) {
			params.flash();
			validation.keep();
			alteracao_senha();
		} else {

			try {
				servicos.alterarSenha(senhaAntiga, novaSenha2,
						Security.connected());
				Secure.logout();
				Application.inicial();
			} catch (DadoNaoEncontradoException e) {

			} catch (SenhaIncorretaException e) {
				forbidden("Senha incorreta");
			} catch (UsuarioBloqueadoException e) {
				forbidden("Este usuario está temporariamente bloqueado");
			} catch (Throwable e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

	public static void alteracao_dados() {
		try {
			Cliente cliente = servicos.getCliente(Security.connected());
			String nome = cliente.getNome();
			String rua = cliente.getEnderecoEntrega().getRua();
			
			int numero = cliente.getEnderecoEntrega().getNumero();
			String bairro = cliente.getEnderecoEntrega().getBairro();
			String complemento = cliente.getEnderecoEntrega().getComplemento();
			String telefone = cliente.getEnderecoEntrega().getTelefone();
			String email = cliente.getEmail();
			String cep = cliente.getEnderecoEntrega().getCep();
			render(cliente,nome, rua, numero, bairro, complemento, cep, telefone, email);

		} catch (DadoNaoEncontradoException e) {

		}
		

	}

	public static void alterar_dados_cadastrais(String nome, String rua,
			int numero, String bairro, String complemento, String cep,
			String telefone, String email) {
		 System.out.println(rua);
		validation.email(email);

		if (validation.hasErrors()) {
			params.flash();
			flash.keep();
			alteracao_dados();
		}
        
		try {
			servicos.alterarDadosCadastrais(Security.connected(), nome, rua,
					numero, bairro, complemento, cep, telefone, email);
		} catch (DadoNaoEncontradoException e) {
			
		}
		PaginasClienteCadastrado.pagina_cliente();

	}
	
	public static void resumo_conta_cliente(){
		try {
			Cliente cliente = servicos.getCliente(Security.connected());
			String usuario = cliente.getNomeUsuario();
			String nome = cliente.getNome();
			String rua = cliente.getEnderecoEntrega().getRua();
			int numero = cliente.getEnderecoEntrega().getNumero();
			String bairro = cliente.getEnderecoEntrega().getBairro();
			String complemento = cliente.getEnderecoEntrega().getComplemento();
			String telefone = cliente.getEnderecoEntrega().getTelefone();
			String cep = cliente.getEnderecoEntrega().getCep();
			String email = cliente.getEmail();
			
			render(usuario,nome,rua, numero,bairro,complemento,telefone,cep,email);
			
		} catch (DadoNaoEncontradoException e) {
			
			e.printStackTrace();
		}
	}
	
	
	public static void pagina_pedidos(long numero,String status,GregorianCalendar dataExata,GregorianCalendar dataInicial,GregorianCalendar dataFinal){
		if(status==null && dataExata==null&& dataInicial==null && dataFinal==null){
			render();
		}
		try {
			System.out.println(status);
			List<Pedido> pedidos = servicos.listarPedidos(numero,status, Security.connected(), dataExata, dataInicial, dataFinal);
			render(pedidos);
		} catch (DadoNaoEncontradoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		
	}

}
